"""全局关键字规则"""

#Python中global关键字的基本规则是：
#当我们在函数内部创建变量时，默认情况下它是局部的。
#当我们在函数外部定义变量时，默认情况下它是全局的。您不必使用global关键字。
#我们使用global关键字在函数内部读写全局变量。
#在函数外使用global关键字无效

c = 1 # 全局变量

def add():
    print(c)

add()

#但是，在某些情况下，我们需要从函数内部修改全局变量。
c = 1 # 全局变量
    
def add1():
    c = c + 2 # increment c by 2
    print(c)
add()
#这是因为我们只能访问全局变量，而不能从函数内部对其进行修改。

"跨Python模块的全局变量"

import config
import update

print(config.a)
print(config.b)

#该模块config.py存储a和b的全局变量。在update.py文件中，我们导入config.py模块并修改a和b的值。
#同样，在main.py文件中，我们同时导入config.py和update.py模块。最后，我们打印并测试全局变量的值，无论它们是否更改。

"嵌套函数中的全局变量"

def foo():
    x = 20

    def bar():
        global x
        x = 25
    
    print("在调用bar之前: ", x)
    print("立即调用bar")
    bar()
    print("在调用bar之后: ", x)

foo()
print("x在主体内: ", x)

#在上面的程序中，我们在嵌套的函数bar()中声明全局变量。在foo()函数中，x对全局关键字没有影响。
#在调用bar之前和之后，变量x接受局部变量的值，即x =20。在foo函数之外，变量x将采用bar函数中定义的值，即x =25。
#这是 因为我们在x中使用了global关键字在bar函数（局部作用域）内创建了全局变量。
#如果我们在bar()函数中做了任何更改，那么这些更改就会出现在局部作用域之外，即foo()。